Vetores bidimensionais (ou matrizes)


A linguagem Java não fornece vetores multidimensionais, mas como um vetor pode ser declarado e ter qualquer tipo de base, é possível criar vetores de vetores (de vetores etc.), alcançando assim o mesmo efeito.


A declaração de um vetor bidimensional para inteiros, de nome "dados" em Java:


int dados[][] = new int[2][4]; // matriz com 2 linhas X 4 colunas

O primeiro conjunto de colchetes [ ] define as linhas e o segundo colchetes [ ] define as colunas. No exemplo acima, são 2 linhas e 4 colunas.


As respectivas posições de cada "célula" é exibida na tabela abaixo.


dados[0][0] dados[0][1] dados[0][2] dados[0][3]
dados[1][0] dados[1][1] dados[1][2] dados[1][3]


Image que agora nesta matriz de 2 linhas e 4 colunas, temos os seguintes dados.


34
43
25
10
32
23
29
11


A variável dados[1][3] armazena o valor 11.

A variável dados[1][0] armazena o valor 32.

A variável dados[0][2] armazena o valor 25.


Declarando vetores bidimensionais:


1) Com expressões de criação de vetores:


int m[][] = new int[3][3]; // matriz quadrada: 3 linhas X 3 colunas


2) Declarando e inicializando:


int m[][] = { {1, 2, 3}, 
              {4, 5, 6}, 
              {7, 8, 9} 
            };

isto equivale as seguintes atribuições:


// 1ª linha:
m[0][0] = 1;
m[0][1] = 2;
m[0][2] = 3;

// 2ª linha:
m[1][0] = 4;
m[1][1] = 5;
m[1][2] = 6;

// 3ª linha:
m[2][0] = 7;
m[2][1] = 8;
m[2][2] = 9;


3) Com linhas de diferentes tamanhos:

int m[][] = new int[2][];  // cria 2 linhas

m[0] = new int[5]; // cria 5 colunas para a linha 0
m[1] = new int[3]; // cria 3 colunas para a linha 1


4) Declarando e inicializando linhas de diferentes tamanhos:


int m[][] = { 
              {1, 2}, 
              {4, 5, 6, 7, 8}, 
              {9, 10, 11} 
            };

equivale as seguintes atribuições:


// 1ª linha com duas colunas:
m[0][0] = 1;
m[0][1] = 2;

// 2ª linha com 5 colunas:
m[1][0] = 4;
m[1][1] = 5;
m[1][2] = 6;
m[1][3] = 7;
m[1][4] = 8;

// 3ª linha com 3 colunas:
m[2][0] = 9;
m[2][1] = 10;
m[2][2] = 11;

Para conhecer os tamanhos dos vetores deve-se utilizar o campo length:


a) m.length determina o número de linhas

b) m[i].length determina o número de colunas da i-ésima linha


Percorrendo vetores bidimensionais com linhas de diferentes tamanhos:


public class App {
        public static void main(String[] args) {

                int m1[][] = { 
                                {1, 2, 3, 4}, 
                                {5, 6} 
                             };

                int m2[][] = { 
                                {1, 2}, 
                                {3}, 
                                {4, 5, 6} 
                              };

                int i, j;

                System.out.printf("==== Matriz m1 ====\n");
                for (i=0; i < m1.length; i++) {
                        System.out.printf("%dª linha: ", (i+1));

                        for (j=0; j < m1[i].length; j++) {
                                System.out.printf("%d ", m1[i][j]);
                        }

                        System.out.printf("\n");
                }

                System.out.printf("\n\n==== Matriz m2 ====\n");
                
                for (i=0; i < m2.length; i++) {
                        System.out.printf("%dª linha: ", (i+1));

                        for (j=0; j < m2[i].length; j++) {
                                System.out.printf("%d ", m2[i][j]);
                        }

                        System.out.printf("\n");
                }
                System.out.printf("\n" );
        }
}

Este é o resultado impresso pelo algoritmo.


==== Matriz m1 ====

1ª linha: 1 2 3 4 

2ª linha: 5 6


==== Matriz m2 ====

1ª linha: 1 2

2ª linha: 3

3ª linha: 4 5 6